4
תגובות
היי,
בפריימוורק Yii, עשיתי טופס קטן, בטופס יש CheckBox, אבל כשאני שולח את הטופס, הכל נשלח חוץ מה - CheckBox.
הוא אמור להחזיר false/true, אבל הוא תמיד נשאר על false למרות שאני מסמן בו V בטופס.
מה עושים?
בפריימוורק Yii, עשיתי טופס קטן, בטופס יש CheckBox, אבל כשאני שולח את הטופס, הכל נשלח חוץ מה - CheckBox.
הוא אמור להחזיר false/true, אבל הוא תמיד נשאר על false למרות שאני מסמן בו V בטופס.
מה עושים?
4 תשובות
קשה לנחש איך עשית את זה בלי לראות את הקוד של הוויו והקוד שמטפל בנתונים מהטופס
ענה
ArielTador
ב
10 לדצמבר 2013
#
<?php $form=$this->beginWidget('CActiveForm', array('action' => Yii::app()->createUrl('main/login'))); ?>
<?php echo $form->errorSummary($model); ?>
<?php echo $form->label($model,'email'); ?>
<?php echo $form->emailField($model,'email'); ?>
<?php echo $form->label($model,'password'); ?>
<?php echo $form->passwordField($model,'password'); ?>
<?php echo $form->checkBox($model,'rememberMe'); ?>
<?php echo $form->label($model,'rememberMe'); ?>
<?php echo CHtml::submitButton('Login'); ?>
<?php $this->endWidget(); ?>
<?php echo $form->errorSummary($model); ?>
<?php echo $form->label($model,'email'); ?>
<?php echo $form->emailField($model,'email'); ?>
<?php echo $form->label($model,'password'); ?>
<?php echo $form->passwordField($model,'password'); ?>
<?php echo $form->checkBox($model,'rememberMe'); ?>
<?php echo $form->label($model,'rememberMe'); ?>
<?php echo CHtml::submitButton('Login'); ?>
<?php $this->endWidget(); ?>
הטופס ^
<?php
class LoginForm extends CFormModel
{
public $email;
public $password;
public $rememberMe;
private $_identity;
public function rules()
{
return array(
array('email, password', 'required', 'message' => Yii::lang('login_form_null_inputs')),
array('email', 'email', 'allowEmpty' => false, 'checkMX' => true, 'message' => Yii::lang('login_form_null_inputs')),
array('password', 'authenticate')
);
}
public function authenticate($attribute,$params)
{
$this->_identity = Accounts::model()->checkLogin($this->email, $this->password, $this->rememberMe);
if(!$this->_identity)
$this->addError('password',Yii::lang('login_form_incorrect_email_or_password'));
}
public function attributeLabels()
{
return array
(
'email' => Yii::lang('login_form_email_input'),
'password' => Yii::lang('login_form_password_input'),
'rememberMe' => Yii::lang('login_form_remember_me_input'),
);
}
}
?>
class LoginForm extends CFormModel
{
public $email;
public $password;
public $rememberMe;
private $_identity;
public function rules()
{
return array(
array('email, password', 'required', 'message' => Yii::lang('login_form_null_inputs')),
array('email', 'email', 'allowEmpty' => false, 'checkMX' => true, 'message' => Yii::lang('login_form_null_inputs')),
array('password', 'authenticate')
);
}
public function authenticate($attribute,$params)
{
$this->_identity = Accounts::model()->checkLogin($this->email, $this->password, $this->rememberMe);
if(!$this->_identity)
$this->addError('password',Yii::lang('login_form_incorrect_email_or_password'));
}
public function attributeLabels()
{
return array
(
'email' => Yii::lang('login_form_email_input'),
'password' => Yii::lang('login_form_password_input'),
'rememberMe' => Yii::lang('login_form_remember_me_input'),
);
}
}
?>
LoginForm ^ המודל של הטופס.
<?php
class Accounts extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function checkLogin($email, $password, $rememberMe)
{
$user = $this->findByAttributes(array('email' => $email, 'password' => $password));
if($user===null)
{
return false;
}
else
{
$this->checkLogined($user->id, $email, $password, $user->active, $rememberMe);
return true;
}
return false;
}
private function checkLogined($id, $email, $password, $active, $rememberMe)
{
$cookies = array('ui' => $id, 'ue' => $email, 'up' => $password, 'ua' => $active);
foreach($cookies as $name=>$value)
{
$cookie = new CHttpCookie($name, $value);
$cookie->expire = time()+60*60*48;
Yii::app()->request->cookies[$name] = $cookie;
}
if($rememberMe==true)
{
$cookie = new CHttpCookie('rm', $email);
Yii::app()->request->cookies['rm'] = $cookie;
}
}
public function primaryKey()
{
return 'id';
}
}
?>
class Accounts extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function checkLogin($email, $password, $rememberMe)
{
$user = $this->findByAttributes(array('email' => $email, 'password' => $password));
if($user===null)
{
return false;
}
else
{
$this->checkLogined($user->id, $email, $password, $user->active, $rememberMe);
return true;
}
return false;
}
private function checkLogined($id, $email, $password, $active, $rememberMe)
{
$cookies = array('ui' => $id, 'ue' => $email, 'up' => $password, 'ua' => $active);
foreach($cookies as $name=>$value)
{
$cookie = new CHttpCookie($name, $value);
$cookie->expire = time()+60*60*48;
Yii::app()->request->cookies[$name] = $cookie;
}
if($rememberMe==true)
{
$cookie = new CHttpCookie('rm', $email);
Yii::app()->request->cookies['rm'] = $cookie;
}
}
public function primaryKey()
{
return 'id';
}
}
?>
המודל Accounts ^^.
<?php
class MainController extends CController
{
public function actionIndex()
{
$model = new LoginForm();
$this->render('main', array('model'=>$model));
}
public function actionLogin()
{
$model = new LoginForm();
if(isset($_POST['LoginForm']))
{
$model->attributes = $_POST['LoginForm'];
if($model->validate())
{
$this->redirect('index');
}
}
$this->render('main', array('model'=>$model));
}
}
?>
class MainController extends CController
{
public function actionIndex()
{
$model = new LoginForm();
$this->render('main', array('model'=>$model));
}
public function actionLogin()
{
$model = new LoginForm();
if(isset($_POST['LoginForm']))
{
$model->attributes = $_POST['LoginForm'];
if($model->validate())
{
$this->redirect('index');
}
}
$this->render('main', array('model'=>$model));
}
}
?>
הקונטרולר main(הקונטרולר שמכיל את login).
לפי מה שזה נראה, ההשמה של הערך מהצ'קבוקס לא מתבצעת בגלל שאין rule בתוך ה-model שמרשה לעשות את זה.
public function rules()
{
return array(
array('email, password', 'required', 'message' => Yii::lang('login_form_null_inputs')),
array('email', 'email', 'allowEmpty' => false, 'checkMX' => true, 'message' => Yii::lang('login_form_null_inputs')),
array('password', 'authenticate'),
array('rememberMe', 'boolean')
);
}
{
return array(
array('email, password', 'required', 'message' => Yii::lang('login_form_null_inputs')),
array('email', 'email', 'allowEmpty' => false, 'checkMX' => true, 'message' => Yii::lang('login_form_null_inputs')),
array('password', 'authenticate'),
array('rememberMe', 'boolean')
);
}
ענה
ArielTador
ב
10 לדצמבר 2013
#
אופסי :S
תודה אחי, אוהב אותך!